瀑布模型特点：
	阶段间具有顺序性和依赖性，有以下两层含义
	1.必须等前一阶段的工作完成之后，才能开始后一阶段的工作；

	2.前一阶段的输出文档就是后一阶段的输入文档，因此，只有前一阶段的输出文档正确，后一阶段的工作才能获得正确的结果。

	瀑布模型每个阶段都应坚持两个重要做法：

	1.每个阶段都必须完成规定的文档，没有交出合格的文档就是没有完成该阶段的任务。完整、准确的合格文档是软件开发时期各类人员之间相互通信的媒介，也是运行时期对软件进行维护的重要依据。

	2.每个阶段结束前都要对所完成的文档进行评审，以便迟早发现问题，改正错误。事实上越是早期阶段犯下的错误，暴露出来的时间就越晚，排除故障改正错误所需付出的代价也越高。因此，及时审查，是保证软件质量，降低软件成本的重要措施。

螺旋模型特点：
	1.螺旋模型的优点
	螺旋模型强调原型的可扩充性和可修改性，原型的进化贯穿整个软件生存周期，这将有助于目标软件的适应能力，支持用户需求的动态变化；
	原型可看作可执行的需求规格说明，易于为用户和开发人员共同理解，还可作为继续开发的基础，并为用户参与所有关键决策提供了方便；
	螺旋模型为项目管理人员及时调整管理决策提供了方便，进而可降低开发风险。
	减少了过多测试或测试不足所带来的风险。
	对可选方案和约束条件的强调有利于已有软件的重用，也有助于把软件质量作为软件开发的一个重要目标。

	2.螺旋模型的缺点
	如果每次迭代的效率不高，致使迭代次数过多，将会增加成本并推迟交付时间
	使用该模型需要有相当丰富的风险评估经验和专门知识，要求开发队伍水平较高，否则会带来更大风险，可能项目实际走向灾难时，开发人员还以为一切正常。

进化模型特点：
	迭代开发：

	软件通过多次迭代逐步完善，每次迭代都包含需求分析、设计、实现和测试。

	灵活应对需求变化：

	适用于需求不明确或频繁变更的项目，能够在开发过程中灵活调整。

	持续交付：

	每个迭代周期结束后都能交付一个可运行的版本，便于用户反馈和早期问题发现。

	用户参与：

	用户在整个开发过程中持续参与，提供反馈，确保软件符合需求。

	风险控制：

	通过分阶段交付，能够早期识别和解决风险。

原型模型特点：
	实际可行
	具有最终系统的基本特征
	构造方便、快速、造价低

	优：
	增加用户与开发人员的交流
	用户在项目开发中占主导作用
	满足用户的动态需求
	降低开发风险

	缺：
	因为用户的参与，使得忽视原型对实际环境的适应性等技术问题，所以不适合大型、复杂项目开发
	对于技术层面远大于其分析层面的问题不宜使用原型模型

增量模型特点：
	最大特点就是将待开发的软件系统模块化和组件化
	增量模型是瀑布模型和原型进化模型的综合
	如同原型进化模型一样，增量模型逐步地向用户交付软件产品，但不同于原型进化模型的是，增量模型在开发过程中所交付的不是完整的新版软件，而只是新增加的构件

	优：
	将待开发的软件系统模块化，可以分批次地提交软件产品，使用户可以及时了解软件项目的进展
	以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统
	开发顺序灵活。开发人员可以对组件的实现顺序进行优先级排序，先完成需求稳定的核心组件。当组件的优先级发生变化时，还能及时地对实现顺序进行调整

	缺：
	待开发的软件系统可以被模块化，如果待开发的软件系统很难被模块化，那么将会给增量开发带来很多麻烦
	对项目管理人员管理全局水平有较高要求
	对开发人员也有要求

极限模型特点：
	1. 迭代开发
	极限编程采用短周期的迭代开发（通常为1-2周），每个迭代都会交付一个可运行的软件版本。

	通过快速迭代，团队能够及时响应用户需求的变化。

	2. 用户参与
	用户（或客户）全程参与开发过程，提供实时反馈。

	用户故事（User Stories）是需求描述的主要形式，帮助团队理解用户需求。

	3. 持续集成
	开发人员频繁地将代码集成到共享的主干中（通常每天多次），并通过自动化测试确保代码质量。

	持续集成有助于尽早发现和修复问题。

	4. 测试驱动开发（TDD）
	在编写功能代码之前，先编写自动化测试用例。
	
	通过测试驱动开发，确保代码的正确性和可维护性。
	
	5. 简单设计
	强调设计应尽可能简单，只满足当前需求，避免过度设计。

	通过重构（Refactoring）不断优化代码结构。

	6. 结对编程
	两名开发人员共同在一台计算机上工作，一人编写代码，另一人实时审查。

	结对编程有助于提高代码质量，促进知识共享。

	7. 小规模发布
	软件以小型、可用的版本发布，而不是一次性交付完整系统。

	小规模发布有助于快速验证功能，降低风险。

	8. 持续反馈
	通过每日站会、迭代评审和用户反馈，团队能够及时调整开发方向。

	反馈机制确保开发过程透明且高效。

	9. 强调沟通
	极限编程注重团队成员之间的面对面沟通，减少文档依赖。

	通过高效的沟通，确保团队对目标的理解一致。

	10. 适应变化
	极限编程的核心思想是拥抱变化，而不是抗拒变化。
	
	通过灵活的流程和工具，团队能够快速适应需求变更。

	11. 高质量代码
	通过自动化测试、持续集成和重构，极限编程确保代码始终保持高质量。

	高质量的代码降低了维护成本，提高了软件的长期可维护性。

Rational统一过程 （RUP）特点：
	1. 迭代开发
	RUP采用迭代式开发方法，将项目划分为多个迭代周期，每个周期都包含需求分析、设计、实现和测试。

	通过迭代开发，团队能够逐步完善软件，降低风险。

	2. 以架构为中心
	RUP强调软件架构的核心作用，在早期迭代中优先设计和验证系统架构。

	通过明确的架构设计，确保系统的可扩展性、可维护性和稳定性。

	3. 用例驱动
	RUP使用用例（Use Cases）来描述系统功能需求。

	用例是需求分析、设计、开发和测试的基础，确保开发过程始终围绕用户需求展开。

	4. 风险驱动
	RUP注重风险管理，在早期迭代中识别和解决高风险问题。

	通过优先处理高风险任务，降低项目失败的可能性。

	5. 阶段划分明确
	RUP将项目生命周期划分为四个阶段：

	初始阶段（Inception）：确定项目范围和目标，评估可行性。

	细化阶段（Elaboration）：设计系统架构，明确需求，制定计划。

	构造阶段（Construction）：实现系统功能，完成主要开发工作。

	交付阶段（Transition）：进行测试、部署和用户培训，确保软件可用。

	每个阶段都有明确的目标和交付物。

	6. 可定制性
	RUP是一个灵活的框架，可以根据项目规模、复杂度和团队需求进行裁剪。

	通过调整流程和活动，RUP适用于不同类型的项目。

	7. 强调文档
	RUP注重文档的完整性和规范性，每个阶段都会生成详细的文档。

	文档包括需求规格、设计文档、测试计划等，确保开发过程透明且可追溯。

	8. 工具支持
	RUP通常与Rational工具集（如Rational Rose、Rational RequisitePro等）结合使用，支持需求管理、建模、测试和配置管理。

	工具支持提高了开发效率和质量。

	9. 角色和职责明确
	RUP定义了多个角色（如项目经理、系统分析师、开发人员、测试人员等），每个角色都有明确的职责。

	通过角色分工，确保团队成员各司其职，协作高效。

	10. 持续验证
	RUP强调在每个迭代中进行测试和验证，确保软件质量。

	通过持续验证，尽早发现和修复问题，减少后期返工。

	11. 支持大型复杂项目
	RUP适用于中大型复杂项目，能够有效管理多个团队和子系统。

	通过明确的流程和文档，确保项目有序推进。

	12. 知识传递
	RUP注重知识传递和经验积累，通过文档和工具支持团队学习和改进。

	知识传递有助于提高团队能力和项目成功率。